#include "Welcomer.h"
#include "../common/DTOCliente.h"

Welcomer::Welcomer(ColaClientes* clientes,const bool* conexionActiva,SpaceBattleInterface* game,ColaMensajes* colaMensajesServer)
:conexionActiva(conexionActiva) {
	this->game = game;
	this->clientes = clientes;
	this->colaMensajesServer = colaMensajesServer;
}

void Welcomer::iniciar(const int puerto,const int maxConexiones){
	this->basePort = puerto;
	socket.listen(puerto, maxConexiones);
}

void Welcomer::terminar()
{
	//Cierro el socket de listening
	socket.shutdown();
	socket.close();
}


void* Welcomer::run(){
	//Mientras no se cierre el server voy a aceptar todos los clientes
	//y meterlos en mi lista de clientes
	int cantClientes = 0;
	//Mientras no se cierre el server
	while(this->conectado()){
		//Acepto el cliente

		SocketProtocoloPlano* nuevoSocket = socket.accept();
		cantClientes = clientes->getSize();
		if((nuevoSocket) && (cantClientes < MAX_SERVER_LISTEN)){
			//Lo meto en la list de clientes
			ConexionServer* cliente= new ConexionServer(nuevoSocket,game,getNextListenPort(),getNextBroadCastPort(),colaMensajesServer,this->conexionActiva);
			this->clientes->setClient(cliente);
		}
	}

	return NULL;
}
int Welcomer::getNextBroadCastPort(){
	static int broadcastPort= 0;

	broadcastPort--;

	return basePort + broadcastPort;
}

int Welcomer::getNextListenPort(){
	static unsigned int listenPort= 0;

	listenPort++;

	return basePort + listenPort;
}

bool Welcomer::conectado() const{
	return *(this->conexionActiva);
}

Welcomer::~Welcomer(){
}
